// 也可以直接使用字面量进行类型声明
let a: 10;
a = 10;

// 可以使用竖线（|）来连接多个类型
let b: "male" | "female";
b = "male";
b = "female"

let c: boolean | string;
c = true;c = 'hello';

// any表示的是任意类型，相当于关闭变量TS的类型检测
// 不建议使用any类
// 隐式的any  let d
let d: any;
d = 10;
d = 'hello';

// unknown 表示未知类型的值
let e: unknown


// d 的类型是any, 它可以复制给任意变量
let s:string
s = d;

e = 'hello';
// unknown实际上就是一个类型安全的any
// unknown类型的变量，不能直接赋值给其他变量
if (typeof e === 'string') {
    s = e;
}

// 类型断言，可以用来告诉解析器变量的实际类型
/**
 * 语法：
 *      变量 as 类型
 *      <string>变量
 */
s = e as string;
s = <string>e;
 
// void用来表示空， 一函数为例， 就表示没有返回值的函数
function fun1():void {
    return null;
}

// never表示永远不会返回结果
function fun2():never {
    throw new Error('报错了！')
}

export {};